package com.atguigu.gulimall.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 大总结 缓存（缓存一致性，缓存穿透，击穿，雪崩） 异步（线程池） 队列（高峰流量，消息放到mq中排好队）
 *
 *
 *  1、接口幂等性
 *      令牌机制 或者加锁
 *  2、本地事务和分布式事务
 *      seata 后台管理系统，并发不高的可以使用；
 *      并发高的，最终一致性，使用Rabbitmq可靠消息保证（发送端确认，接收端确认），最后根据消息进行修改数据库做到最终一致性
 *  3、压力测试
 *      Jmeter jconsole
 *  4、缓存和分布式锁
 *      使用分布式锁，一次只进来一个查询，将结果放到缓存中。
 *      接口幂等性使用分布式锁，一次只能一个进程调用，先判断状态，未进行处理就开始处理，否则不进行处理
 *      定时任务使用分布式锁，只有一个机器执行业务逻辑，比如上架功能
 *  5、ES
 *      检索数据都放在ES中
 *  6、异步线程池
 *      建立线程池，异步任务提交到线程池
 *  7、登录
 *      单点登录，社交登录，整合SpringSession，整合分布式系统session不一致问题
 *  8、核心业务
 *      商品上架、商品检索、商品详情（缓存技术 springcache）、购物车、订单、秒杀
 *  9、RabbitMQ
 *      分布式事务最终一致性，订单场景使用，关单使用死信队列，保证数据都被关掉。秒杀进行流量削峰，应用解耦。
 *  10、支付
 *      支付宝沙箱
 *  11、定时任务和分布式调度
 *  12、springcloud组件
 *		springcloud alibaba 组件
 *	  		nacos 注册、配置中心
 *	 	  	Sentinel 流量控制
 *	  	 	Seata 分布式事务
 *	  		OSS 对象存储
 *
 * 		Spring cloud 组件
 *	   		feign 远程调用
 *	   		gateway 网关
 *	   		sleuth+zipkin
 *
 *
 */



/**
 * 1、开启服务注册发现
 *  (配置nacos的注册中心地址)
 * 2、编写网关配置文件
 * gulimall.com 域名转到 nginx ，nginx转到网关，网关根据域名请求头转给对应的服务器
 * /api/xxx 转交给对应的服务器
 * 如果满足域名，转交给对应的服务
 *
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class GulimallGatewayApplication {

	public static void main(String[] args) {
		SpringApplication.run(GulimallGatewayApplication.class, args);
	}

}
